<?php

declare(strict_types=1);

namespace app\controller;

use app\BaseController;
use app\service\LoginService;
use think\Request;
use think\Response;
use think\facade\Session;

class Login extends BaseController
{
    /**
     * 登录服务实例
     * @var LoginService
     */
    private LoginService $loginService;

    /**
     * 通过依赖注入初始化注册服务
     *
     * @param LoginService $LoginService 由容器注入的用户登录业务逻辑服务实例
     */
    public function __construct(LoginService $loginService)
    {
        $this->loginService = $loginService;
    }

    /**
     * 显示登录页面
     * @return Response
     */
    public function index(): Response
    {
        // 检查用户是否已经登录
        if (Session::has('user_id')) {
            return redirect((string) url('/'));
        }

        // 从 Session 取出并立即删除 (flash)
        $oldInput = Session::pull('old_input', []);

        return view('auth/login', [
            'old' => $oldInput,
        ]);
    }

    /**
     * 处理登录请求 (POST)
     *
     * @param Request $request 注入的当前 HTTP 请求实例
     * @return Response
     */
    public function check(Request $request): Response
    {
        if (!$request->isPost()) {
            return redirect((string) url('/login'))->with('message', '无效的请求方法。');
        }

        $data = $request->only([
            'username', // 对应表单中的用户名/邮箱输入框
            'password',
            'captcha',
        ]);

        $result = $this->loginService->login($data);

        // Session::flash('message', $result['message']);

        if ($result['success']) {
            Session::delete('old_input');

            Session::set('user_id',  $result['data']['user_id'] ?? null);
            Session::set('username', $result['data']['username'] ?? null);

            return redirect((string) url('/'));
        } else {
            $flashInput = ['username' => $data['username'] ?? ''];
            Session::set('old_input', $flashInput);

            return redirect((string) url('/login'));
        }
    }
}
